#pragma once
#include <memory>
#include <string>
#include <thread>
#include <atomic>
#include <chrono>

class CTableManager;
class CLogDatabase;
class CppSQLite3DB;

class CTableBase;

class CLeanServer
{
public:
	CLeanServer();
	~CLeanServer();

	// 初始化清理服务
	int Initialize(CTableManager* tableManager);

	// 清理过期日志记录
	int CleanExpiredLogs();

	// 启动定时清理服务
	int StartScheduledCleanup();

	// 停止定时清理服务
	void StopScheduledCleanup();

	// 检查定时清理服务是否正在运行
	bool IsScheduledCleanupRunning() const;

private:
	// 检查表类型是否为需要清理的类型
	bool IsTableTypeForCleanup(int tableType) const;
	
	// 清理指定表的过期记录
	int CleanTableExpiredLogs(const std::string& tableName, CLogDatabase* logDatabase, CTableBase* table);
	
	// 分批清理过期记录（为了性能考虑）
	int CleanExpiredRecordsInBatches(CppSQLite3DB* db, const std::string& tableName, 
									uint64_t uploadedCutoffTime, uint64_t unuploadedCutoffTime, 
									uint64_t uploadedCursor, int batchSize);
	
	// 获取当前时间戳（秒）
	uint64_t GetCurrentTimestamp() const;

	// 定时清理任务的主循环
	void ScheduledCleanupLoop();

private:
	CTableManager* m_tableManager;
	
	// 定时清理相关成员
	std::thread m_cleanupThread;
	std::atomic<bool> m_stopRequested;
	std::atomic<bool> m_isRunning;
	
	// 清理配置常量
	static const uint64_t UPLOADED_RETENTION_DAYS = 5 * 24 * 3600;  // 5天（秒）
	static const uint64_t UNUPLOADED_RETENTION_DAYS = 30 * 24 * 3600; // 30天（秒）
	static const int CLEANUP_INTERVAL_MINUTES = 1; // 清理间隔：1分钟
};

